package com.woniuxy.project115.kaer.tenant.util;
//距离计算器
public class DistanceCalculator {
    // 地球半径，单位：千米
    private static final double EARTH_RADIUS = 6371;

    /**
     * 将角度转换为弧度
     * @param degrees 角度
     * @return 弧度
     */
    private static double degreesToRadians(double degrees) {
        return degrees * Math.PI / 180;
    }

    /**
     * 计算两地之间的距离
     * @param lat1 第一点的纬度
     * @param lon1 第一点的经度
     * @param lat2 第二点的纬度
     * @param lon2 第二点的经度
     * @return 两地之间的距离，单位：千米
     */
    public static double calculateDistance(double lon1, double lat1, double lon2, double lat2) {
        // 将经纬度从角度转换为弧度
        double lat1Rad = degreesToRadians(lat1);
        double lon1Rad = degreesToRadians(lon1);
        double lat2Rad = degreesToRadians(lat2);
        double lon2Rad = degreesToRadians(lon2);

        // 计算纬度差和经度差
        double dLat = lat2Rad - lat1Rad;
        double dLon = lon2Rad - lon1Rad;

        // Haversine 公式的中间计算步骤
        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
                Math.cos(lat1Rad) * Math.cos(lat2Rad) *
                        Math.sin(dLon / 2) * Math.sin(dLon / 2);

        // 计算大圆距离
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        // 计算最终距离并精确到小数点后三位
        return Math.round(EARTH_RADIUS * c * 1000.0) / 1000.0;
    }

//    public static void main(String[] args) {
//        // 示例经纬度
//        double lat1 = 34.0522; // 第一点的纬度
//        double lon1 = -118.2437; // 第一点的经度
//        double lat2 = 40.7128; // 第二点的纬度
//        double lon2 = -74.0060; // 第二点的经度
//
//        // 计算距离
//        double distance = calculateDistance(lat1, lon1, lat2, lon2);
//        System.out.println("两地之间的距离是: " + distance + " 千米");
//    }
}
